From: Colin Walters Date: Fri, 16 Sep 2011 14:37:59 +0000 (-0400) Subject: global: Initiate *full* GC at idle X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~7691 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=f54b82f64c2f0553b0df24678c188e0d2144af52;p=gnome-shell.git global: Initiate *full* GC at idle While I've been trying to make the GC kick in more often, I've decided it's a better tradeoff to aggressively GC at "leisure", for multiple reasons. We can and should revisit this at a later time, but basically: * The shell doesn't generate *that* much JS data - garbage collection is very fast here. * Long periods without GC mean we're not calling free() when we could, which in turn makes heap fragmentation much worse. * Ensuring the GC runs at idle makes it much less likely we'll take a random large GC hit in the middle of an animation. https://bugzilla.gnome.org/show_bug.cgi?id=659254 --- diff --git a/src/shell-global.c b/src/shell-global.c index 98b51bec4..bf7b5a794 100644 --- a/src/shell-global.c +++ b/src/shell-global.c @@ -1429,11 +1429,12 @@ run_leisure_functions (gpointer data) if (global->work_count > 0) return FALSE; - /* - * We do call MAYBE_GC() here to free up some memory and - * prevent the GC from running when we are busy doing other things. + /* Previously we called gjs_maybe_gc(). However, it simply doesn't + * trigger often enough. Garbage collection is very fast here, so + * let's just aggressively GC. This will help avoid both heap + * fragmentation, and the GC kicking in when we don't want it to. */ - shell_global_maybe_gc (global); + gjs_context_gc (global->js_context); /* No leisure closures, so we are done */ if (global->leisure_closures == NULL)